package br.com.esporte.view.site.grupo.preview.participantes;

import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;

import br.com.esporte.exception.ViewException;
import br.com.esporte.model.Grupo;
import br.com.esporte.model.Usuario;
import br.com.esporte.view.infra.generic.Pagina;
import br.com.esporte.view.site.component.image.ImageRelativePath;
import br.com.esporte.view.site.component.menu.MenuLateralComponente;
import br.com.esporte.view.site.component.menu.MenuEnum;
import br.com.esporte.view.site.component.menu.MenuLateral;
import br.com.esporte.view.site.template.PaginaTemplate;
import br.com.esporte.view.site.template.util.ConstantsTemplate;

/**
 * 
 * @author Milton Domingues
 *
 */
public class PaginaListarParticipantes extends PaginaTemplate {

	private static final String LIST_PARTICIPANTE_ID = "listParticipantes";
	private static final String NOME_PARTICIPANTE_ID = "nomeParticipante";
	private static final String IMG_PARTICIPANTE_ID = "imgParticipante";

	private Pagina paginaInicio;
	private Grupo grupo;
	private List<Usuario> participantes;

	public PaginaListarParticipantes(Grupo grupo, Pagina paginaRetorno, Pagina paginaInicio) {
		super(paginaRetorno, MenuEnum.LISTAR_GRUPO);
		setGrupo(grupo);
		setPaginaInicio(paginaInicio);
		carregarView();
		montarPagina();
	}

	@Override
	public void carregarView() {
		List<Usuario> list = getFachada().consultarUsuariosParticipaGrupo(getGrupo());
		setParticipantes(list);
	}

	private ListView<Usuario> criarListaParticipantes(List<Usuario> usuarios){
		ListView<Usuario> usuariosList = new ListView<Usuario>(LIST_PARTICIPANTE_ID, usuarios) {

			private static final long serialVersionUID = -4162861000327698485L;

			@Override
			protected void populateItem(ListItem<Usuario> item) {
				Usuario usuario = item.getModelObject();
				ImageRelativePath moderador = new ImageRelativePath(IMG_PARTICIPANTE_ID, ConstantsTemplate.getPathImageUsuario(usuario.getImagem()));
				item.add(moderador);
				item.add(new Label(NOME_PARTICIPANTE_ID, usuario.getNome()));
			}
		};
		return usuariosList;
	}

	public Grupo getGrupo() {
		return grupo;
	}

	@Override
	public List<MenuLateral> getListaMenuPagina() {
		List<MenuLateral> menus = new ArrayList<MenuLateral>();

		Link<Pagina> event = new Link<Pagina>(MenuLateralComponente.LINK_MENU_ID) {

			private static final long serialVersionUID = 1L;

			@Override
			public void onClick() {
				try{
					setResponsePage(getPaginaRetorno());
				}catch (ViewException e) {
					redirectViewException(e);
				}
			}
		};
		menus.add(new MenuLateral(event, getMenuHome()));

		Link<Pagina> event2 = new Link<Pagina>(MenuLateralComponente.LINK_MENU_ID) {

			private static final long serialVersionUID = 1L;

			@Override
			public void onClick() {
				try{
					setResponsePage(getPaginaInicio());
				}catch (ViewException e) {
					redirectViewException(e);
				}
			}
		};
		menus.add(new MenuLateral(event2, MenuEnum.INICIO));

		return menus;
	}

	public Pagina getPaginaInicio() {
		return paginaInicio;
	}

	public List<Usuario> getParticipantes() {
		return participantes;
	}

	@Override
	public String getTipoEsporte() {
		return grupo.getTipo().getCodigo();
	}

	@Override
	public void montarPagina() {
		super.montarPagina();
		addContainer(criarListaParticipantes(getParticipantes()));
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public void setPaginaInicio(Pagina paginaInicio) {
		this.paginaInicio = paginaInicio;
	}


	public void setParticipantes(List<Usuario> participantes) {
		this.participantes = participantes;
	}

}
